iT邦幫忙

0

Python 的 Lambda 函式:簡潔而強大的匿名函式

  • 分享至 

  • xImage
  •  

什麼是 Lambda 函式?

Lambda 函式,也稱為匿名函式,是一種在單行內定義的小函式。
它不需要像一般函式一樣使用 def 關鍵字來定義函式名稱,而是直接使用 lambda 關鍵字來表示
Lambda 函式的語法非常簡潔,通常用於一些簡單的運算或作為其他函式的參數。

Lambda 函式的語法

lambda arguments: expression

  • lambda:關鍵字,表示定義一個匿名函式。
  • arguments:函式的參數,可以有多個,用逗號分隔。
  • expression:函式的運算表達式,也就是函式的返回值。

Lambda 函式的例子

# 傳統函式寫法
def square(x):
    return x * x

# Lambda 函式寫法
square = lambda x: x * x

# 兩者效果相同,都可以計算一個數的平方
print(square(5))  # 输出 25

Lambda 函式的常見用法

作為其他函式的參數:
- map()函式:將函式應用於可迭代對象的每個元素。
- filter() 函式:過濾可迭代對象中的元素。
- reduce() 函式:將函式應用於可迭代對象的元素,從左到右累積結果。
- sorted(arguments**,**key=lambda x: expression) 函式:用於排序可迭代對象。

map:將函式應用到序列的每個元素上。

map(function, iterable)
function: 要應用於每個元素的函式。
iterable: 可迭代對象,也就是要進行操作的數據集合。

numbers = [1, 2, 3, 4]
squared = list(map(lambda x: x*x, numbers))
print(squared)  # 输出 [1, 4, 9, 16]

filter:過濾序列中的元素

filter(function, iterable)
function: 這個函式會返回一個布林值,表示元素是否符合條件。
iterable: 要進行篩選的可迭代對象。

numbers = [1, 2, 3, 4, 5]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers)  # 输出 [2, 4]

sorted:對可迭代對象進行排序。

sorted(iterable, key=None, reverse=False)

fruits = ['banana', 'apple', 'orange']
sorted_fruits = sorted(fruits, key=lambda x: x[-1])
print(sorted_fruits)  # 输出 ['banana', 'orange', 'apple']

最終的排序結果是按照水果名稱的最後一個字母的字母序x[-1]進行排序的。

  • iterable: 要排序的可迭代物件。
  • key: 一個自訂的函式,用來指定排序的依據。這個函式會對每個元素進行操作,並傳回一個值,排序就是根據傳回的值進行的。
  • reverse: 一個布林值,指定排序順序。 True 表示降序,False 表示升序(預設)。

關於 map、filter 和 sorted 中 iterable 的位置

不曉得你有沒有發現,在map、filter 和 sorted 中 iterable 的位置有點不同?

  • map 與 filter:
    map(function, iterable)
    iterable(要操作的序列)總是放在 function(要套用的函式)的後面。
    這是因為 map 和 filter 的主要目的是對序列中的每個元素應用一個函式,所以序列本身就是操作的物件。r

  • sorted:
    sorted(iterable, key=None, reverse=False)
    iterable 放在 key(排序的依據)的前面。
    這是因為 sorted 的主要目的是對序列iterable進行排序,而 key 是一个可選參數,用于指定排序的依據。

Lambda 函式的優缺點

  • 優點:
    • 簡潔: 對於簡單的運算,Lambda 函式可以寫得非常簡潔。
    • 靈活: 可以作為參數傳遞給其他函式,提高程式碼的可讀性。
  • 缺點:
    • 可讀性: 過於複雜的 Lambda 表達式可能降低程式碼的可讀性。
    • 單行限制: Lambda 函式通常只能寫一行,對於複雜的邏輯不太適合。

何時使用 Lambda 函式?

簡單的運算: 對於一些簡單的運算,如平方、求絕對值等,Lambda 函式非常適合。
作為回調函式: 在使用一些庫函式時,需要傳入一個函式作為參數,Lambda 函式可以簡化寫法。
與高階函式結合: map、filter、sorted 等高階函式與 Lambda 函式配合使用,可以寫出非常簡潔的程式碼。

總結

Lambda 函式作為 Python 的一個重要特性,可以讓程式碼更加簡潔和靈活。但過度使用 Lambda 函式也可能降低程式


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言